package cn.impl;

import cn.annotation.Log;
import cn.basic.HibBaseDAOImpl;
import cn.basic.iHibBaseDAO;
import cn.common.properties.LogOperType;
import cn.dao.NoticeDAO;
import cn.model.TNotice;
import cn.model.VNoticeUser;
import org.springframework.stereotype.Component;

import java.util.List;
@Component("noticedao")
public class NoticeDAOImpl implements NoticeDAO {

    //连接数据库操作层接口,实现业务与数据的交换
    private iHibBaseDAO bdao= null;

    public NoticeDAOImpl(){
        bdao = new HibBaseDAOImpl();
    }
    /**
     * 添加一条公告
     *
     * @param notice 对象
     * @return 添加成功返回受影响的行数
     */
    @Log(isSaveLog=true,operationType= LogOperType.ADD,operationName="添加一条公告信息")
    @Override
    public int addNotice(TNotice notice) {
        return (Integer) bdao.insert(notice);
    }

    /**
     * 删除一条公告
     *
     * @param noticeid 编号
     * @return 添加成功返回受影响的行数
     */
    @Log(isSaveLog=true,operationType= LogOperType.DELETE,operationName="删除一条公告信息")
    @Override
    public boolean deleteNatice(int noticeid) {
        return bdao.delete(noticeid);
    }

    /**
     * 修改一条公告信息
     *
     * @param notice 需要修改的对象
     * @return
     */
    @Log(isSaveLog=true,operationType= LogOperType.MODIFY,operationName="修改一条公告信息")
    @Override
    public boolean modifyNatice(TNotice notice) {
        return bdao.update(notice);
    }

    /**
     * 根据条件获取公告的列表
     *
     * @param wherecondition 组合查询条件字符串,
     * @param currentPage    按分页查询的当前页
     * @param pageSize       按分页查询的每页数量
     * @return List
     */
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="查询公告列表数据")
    @Override
    public List<VNoticeUser> getNatice(String wherecondition, int currentPage, int pageSize) {
        String hql ="from VNoticeUser";
        if (wherecondition!=null && !wherecondition.equals("")){
            hql+=wherecondition;
        }
        if (wherecondition == null && wherecondition.equals("")){
            hql += "order by creationTime desc";
        }
        return bdao.selectByPage(hql,currentPage,pageSize);
    }

    /**
     * 根据条件获取符合条件的公告的数量
     *
     * @param wherecondition
     * @return
     */
    @Override
    public int getNaticeAmount(String wherecondition) {
        String hql = "select count(*) from VNoticeUser";
        if (wherecondition!=null && !wherecondition.equals("")){
            hql+=wherecondition;
        }
        return bdao.selectValue(hql);
    }

    /**
     * 通过用户ID查询
     *
     * @param noticeid 公告编号
     * @return 返回用户信息列表
     */
    @Override
    public VNoticeUser getNaticeById(int noticeid) {
        return (VNoticeUser) bdao.findById(VNoticeUser.class,noticeid);
    }
}
